package main

import (
	"fmt"
)


func main(){
	//创建链表队列的头结点
	//head := &QueueLinkNode{}
	link := &Link{
		head : &QueueLinkNode{},
	}
	key := 0
	var name string
	for {
		fmt.Println("1、入队")
		fmt.Println("2、出队")
		fmt.Println("3、显示队列")
		fmt.Scanln(&key)
		switch key {
		case 1:
			fmt.Printf("输入入队人：")
			fmt.Scanln(&name)
			PushLInk(link,name)
		case 2:
			str := PopLInk(link)
			fmt.Println("出队人 : ",str)
		case 3:
			ShowLInk(link)
		default:
			fmt.Println("输入有误")
		}
	}
}
//创建一个链表结点结构体
type QueueLinkNode struct{
	Name string
	Next *QueueLinkNode
}

//入队
func PushLInk(link *Link,name string){
	fmt.Println(link.tail)
	newnode := &QueueLinkNode{
		Name : name,
	}
	if link.tail == nil{
		temp := link.head
		for {
			if temp.Next == nil{
				break
			}
			temp = temp.Next
		}
		temp.Next = newnode
		link.tail = newnode
	}else{
		link.tail.Next = newnode
		link.tail = newnode
	}
}

//出队
func PopLInk(link *Link) string{
	temp := link.head
	if temp.Next == nil{
		link.tail = nil
		fmt.Println("队列链表为空~无法读取数据")
		return ""
	}
	res := temp.Next.Name
	temp.Next = temp.Next.Next
	return res
}

//显示队列
func ShowLInk(link *Link){
	temp := link.head
	for {
		if temp.Next == nil{
			break
		}
		fmt.Println("Name:",temp.Next.Name)
		temp = temp.Next
	}
}

//封装头尾指针为一个结构体
type Link struct{
	head *QueueLinkNode
	tail *QueueLinkNode
}